package api.collection;

import java.util.ArrayList;
import java.util.List;

/**
 * 集合的排序---Point对象
 */
public class SorPoint {
    public static void main(String[] args) {
        List<Point> list=new ArrayList<>();
        list.add(new Point(100,200));
        list.add(new Point(6,5));
        list.add(new Point(0,3));
        list.add(new Point(120,30));
        list.add(new Point(10,60));
        System.out.println("list原始数据:"+list);
        //jdk1.8时List集合自身提供了sort方法进行排序，方法中需要传入比较器
        //lambda表达式
        list.sort(((o1, o2) -> {
            int len1=o1.getX()*o1.getX()+o1.getY()+o1.getY();
            int len2=o2.getX()*o2.getX()+o2.getY()+o2.getY();
             return len1-len2;//升序
        }));
//        list.sort(new Comparator<Point>() {
//            @Override
//            public int compare(Point o1, Point o2) {
//                return o1.getX()-o2.getX();//按照x坐标来进行排序的
//                return o1.getY()-o2.getY();//按照y坐标来进行排序的
//            }
//        });

        /*
        //自定义排序规则：
        //通过
        //简化Lambda表达式
         Collections.sort(list,(o1, o2) ->{
            int len1=o1.getX()*o1.getX()+o1.getY()+o1.getY();
            int len2=o2.getX()*o2.getX()+o2.getY()+o2.getY();
           // return len1-len2;//升序
            return len2-len1;//降序
        } );

        Collections.sort(list, new Comparator<Point>() {
            @Override
            public int compare(Point o1, Point o2) {
                int len1=o1.getX()*o1.getX()+o1.getY()+o1.getY();
                int len2=o2.getX()*o2.getX()+o2.getY()+o2.getY();
                return len1-len2;//升序
               // return len2-len1;//降序
//                return o1.getX()-o2.getX();按x排序升序
//                return o2.getY()-o1.getY();//按y排序降序
            }
        });

         */
        System.out.println(list);
    }
}
